package xyz.ssf.cloud.project.system.service.impl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import xyz.ssf.cloud.common.utils.PasswordUtil;
//import xyz.ssf.cloud.project.system.domain.SysProfileLog;
import xyz.ssf.cloud.project.system.domain.SysUser;
import xyz.ssf.cloud.project.system.domain.vo.PasswordUpdateVO;
import xyz.ssf.cloud.project.system.domain.vo.ProfileUpdateVO;
import xyz.ssf.cloud.project.system.domain.vo.ProfileVO;
import xyz.ssf.cloud.project.system.domain.vo.RoleVO;
import xyz.ssf.cloud.project.system.mapper.SysUserProfileMapper;
//import xyz.ssf.cloud.project.system.service.ISysProfileLogService;
import xyz.ssf.cloud.project.system.service.ISysProfileService;

import java.util.List;
import java.util.regex.Pattern;

/**
 * 个人中心服务实现类
 * 
 * @author ssf
 */
@Service
public class SysProfileServiceImpl implements ISysProfileService {
    
    @Autowired
    private SysUserProfileMapper userProfileMapper;
    
//    @Autowired
//    private ISysProfileLogService profileLogService;
    
    /**
     * 获取个人信息
     * 
     * @param userId 用户ID
     * @return 个人信息
     */
    @Override
    public ProfileVO getProfile(Long userId) {
        // 查询用户信息
        SysUser user = userProfileMapper.selectUserById(userId);
        if (user == null) {
            return null;
        }
        
        // 查询用户角色
        List<RoleVO> roles = userProfileMapper.selectRolesByUserId(userId);
        
        // 构建返回对象
        ProfileVO profileVO = new ProfileVO();
        profileVO.setId(user.getId());
        profileVO.setUsername(user.getUsername());
        profileVO.setNickname(user.getNickname());
        profileVO.setEmail(user.getEmail());
        profileVO.setMobile(user.getMobile());
        profileVO.setGender(user.getGender());
        profileVO.setAvatar(user.getAvatar());
        profileVO.setCreateTime(user.getCreateTime());
        profileVO.setUpdateTime(user.getUpdateTime());
        profileVO.setRoles(roles);
        
        return profileVO;
    }
    
    /**
     * 更新个人信息
     * 
     * @param userId 用户ID
     * @param profileUpdate 个人信息更新请求
     * @return 结果
     */
    @Override
    @Transactional
    public int updateProfile(Long userId, ProfileUpdateVO profileUpdate) {
        // 查询用户信息
        SysUser user = userProfileMapper.selectUserById(userId);
        if (user == null) {
            return 0;
        }
        
        // 更新用户信息
        user.setNickname(profileUpdate.getNickname());
        user.setEmail(profileUpdate.getEmail());
        user.setMobile(profileUpdate.getMobile());
        user.setGender(profileUpdate.getGender());
        user.setUpdateBy(user.getUsername());
        
        // 记录操作日志
//        SysProfileLog log = new SysProfileLog();
//        log.setUserId(userId);
//        log.setOperation("update_info");
//        log.setOperationTime(new Date());
//        log.setStatus("0");
//        log.setMsg("更新个人信息成功");
//        profileLogService.insertProfileLog(log);
        
        return userProfileMapper.updateUser(user);
    }
    
    /**
     * 更新用户密码
     * 
     * @param userId 用户ID
     * @param passwordUpdate 密码更新请求
     * @return 结果
     */
    @Override
    @Transactional
    public int updatePassword(Long userId, PasswordUpdateVO passwordUpdate) {
        // 查询用户信息
        SysUser user = userProfileMapper.selectUserById(userId);
        if (user == null) {
            return 0;
        }
        
        // 校验旧密码
        if (!PasswordUtil.matches(passwordUpdate.getOldPassword(), user.getPassword())) {
            // 记录操作日志
//            SysProfileLog log = new SysProfileLog();
//            log.setUserId(userId);
//            log.setOperation("update_pwd");
//            log.setOperationTime(new Date());
//            log.setStatus("1");
//            log.setMsg("旧密码错误");
//            profileLogService.insertProfileLog(log);
            return -1;
        }
        
        // 校验新密码与确认密码是否一致
        if (!passwordUpdate.getNewPassword().equals(passwordUpdate.getConfirmPassword())) {
            // 记录操作日志
//            SysProfileLog log = new SysProfileLog();
//            log.setUserId(userId);
//            log.setOperation("update_pwd");
//            log.setOperationTime(new Date());
//            log.setStatus("1");
//            log.setMsg("新密码与确认密码不一致");
//            profileLogService.insertProfileLog(log);
            return -2;
        }
        
        // 校验密码复杂度
        if (!isPasswordValid(passwordUpdate.getNewPassword())) {
            // 记录操作日志
//            SysProfileLog log = new SysProfileLog();
//            log.setUserId(userId);
//            log.setOperation("update_pwd");
//            log.setOperationTime(new Date());
//            log.setStatus("1");
//            log.setMsg("密码不符合复杂度要求");
//            profileLogService.insertProfileLog(log);
            return -3;
        }
        
        // 更新密码
        user.setPassword(PasswordUtil.encode(passwordUpdate.getNewPassword()));
        
        // 记录操作日志
//        SysProfileLog log = new SysProfileLog();
//        log.setUserId(userId);
//        log.setOperation("update_pwd");
//        log.setOperationTime(new Date());
//        log.setStatus("0");
//        log.setMsg("修改密码成功");
//        profileLogService.insertProfileLog(log);
        
        return userProfileMapper.updateUserPassword(user);
    }
    
    /**
     * 更新用户头像
     * 
     * @param userId 用户ID
     * @param avatar 头像地址
     * @return 结果
     */
    @Override
    @Transactional
    public int updateAvatar(Long userId, String avatar) {
        // 查询用户信息
        SysUser user = userProfileMapper.selectUserById(userId);
        if (user == null) {
            return 0;
        }
        
        // 更新头像
        user.setAvatar(avatar);
        
        // 记录操作日志
//        SysProfileLog log = new SysProfileLog();
//        log.setUserId(userId);
//        log.setOperation("update_avatar");
//        log.setOperationTime(new Date());
//        log.setStatus("0");
//        log.setMsg("更新头像成功");
//        profileLogService.insertProfileLog(log);
        
        return userProfileMapper.updateUserAvatar(user);
    }
    
    /**
     * 校验密码复杂度
     * 
     * @param password 密码
     * @return 是否符合复杂度要求
     */
    private boolean isPasswordValid(String password) {
        if (!StringUtils.hasText(password) || password.length() < 8) {
            return false;
        }
        
        // 包含大小写字母和数字
        boolean hasUpperCase = Pattern.compile("[A-Z]").matcher(password).find();
        boolean hasLowerCase = Pattern.compile("[a-z]").matcher(password).find();
        boolean hasDigit = Pattern.compile("\\d").matcher(password).find();
        
        return hasUpperCase && hasLowerCase && hasDigit;
    }
} 